package output;

import instance.InstanceResultado;
import instance.InstanceTP3;

import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.LinkedList;





public class OutputTP3 implements Output{
	private static String outputFile;

	public OutputTP3(String nombArch){
		
	  outputFile =nombArch;
	}
	public void writeInstanceResultado(LinkedList<InstanceResultado> lista_insts) throws Exception {
		/*||CUIDADO||:Usar después de generar el tipo OutputTP3 con el constructor que cambia el outputfile*/
		BufferedWriter bw = new BufferedWriter(new PrintWriter( OutputTP3.outputFile) );
		
		Iterator<InstanceResultado> it = lista_insts.iterator();
		while(it.hasNext()){
			String primer_ciclo = "";
			String segundo_ciclo = "";
			InstanceResultado inst = it.next();
			Iterator<Integer> it_ciclos = inst.getPrimer_ciclo().iterator();
			while(it_ciclos.hasNext()){
				primer_ciclo = primer_ciclo + ((Integer) (it_ciclos.next()+1)).toString();
				if(it_ciclos.hasNext()) primer_ciclo = primer_ciclo + " ";
			}
			it_ciclos = inst.getSegundo_ciclo().iterator();
			while(it_ciclos.hasNext()){
				segundo_ciclo = segundo_ciclo + ((Integer) (it_ciclos.next()+1)).toString();
				if(it_ciclos.hasNext()) segundo_ciclo = segundo_ciclo + " ";
			}
			bw.write(primer_ciclo); bw.newLine();
			bw.write(segundo_ciclo);
			if(it.hasNext()) bw.newLine();
		}
		bw.close();
	}
	
	public void writeInstance(LinkedList<InstanceTP3> lista_insts) throws Exception {
		/*||CUIDADO||:Usar después de generar el tipo OutputTP3 con el constructor que cambia el outputfile*/
		BufferedWriter bw = new BufferedWriter(new PrintWriter( OutputTP3.outputFile) );
		
		Iterator<InstanceTP3> it = lista_insts.iterator();
		while(it.hasNext()){
			InstanceTP3 inst = it.next();
			String n_y_v = ((Integer)inst.n).toString() + " " + ((Integer)(inst.nodo_origen+1)).toString();
			bw.write(n_y_v); bw.newLine();
			for(int i = 1; i<inst.matriz.length;i++){
				String linea = ""; 
				for(int j = 0; j<i; j++){
					linea = linea + inst.matriz[i][j];
					if(j+1!=i) linea = linea + " ";
				}
				bw.write(linea);
				if(i+1!=inst.matriz.length)bw.newLine();
			}
			if(it.hasNext()) bw.newLine();
		}
		bw.close();
	}
	
	public void writeTestRend(LinkedList<String> strings_salida) throws Exception {
		/*||CUIDADO||:Usar después de generar el tipo OutputTP3 con el constructor que cambia el outputfile*/
		BufferedWriter bw = new BufferedWriter(new PrintWriter( OutputTP3.outputFile) );
		
		Iterator<String> it_res = strings_salida.iterator();
		while(it_res.hasNext()){
			String st = it_res.next();
			bw.write(st);
			if(it_res.hasNext()) bw.newLine();
		}
		bw.close();
	}
	
	public void writeArreglo(int[] arr, int cuanto_multiplicar) throws Exception {
		/*||CUIDADO||:Usar después de generar el tipo OutputTP3 con el constructor que cambia el outputfile*/
		/*Imprime la posición del arreglo y un espacio y el porcentaje del total*/
		BufferedWriter bw = new BufferedWriter(new PrintWriter( OutputTP3.outputFile) );
		int total = 0;
		for(int i = 0; i<arr.length; i++){
			 total += arr[i];
			 System.out.println("arr[i]: " + arr[i] );
		}
		System.out.println(total );
		
		for(int i = 0; i<arr.length; i++){
			float iesimo_porcentaje = (arr[i]/total)*100;
			bw.write(((i*cuanto_multiplicar)+1)+ " "+ iesimo_porcentaje);
			if(i<arr.length-1) bw.newLine();
		}
		bw.close();
	}
	
	@Override
	public void writeFile(String soluciones) throws Exception {
		
		BufferedWriter bw = new BufferedWriter(new PrintWriter(
				OutputTP3.outputFile));

		bw.write(soluciones);
        bw.newLine();
        bw.close();
	}
}
